// each方法
// Array.prototype.each = function(callback) {
//   for(let i = 0; i < this.length; i++) {
//     callback(this[i],i);
//   }
// }
// let arr = [10,20,30,'AA',40];
// arr = arr.each((item,index) => {
//   console.log(item,index);
// });
/* 
  思考题:
    1.each
    let arr = [10,20,30,'AA',40],
        obj = {};
    arr = arr.each(function (item,index) {
        //=> this:obj(each 第二个参数不传,this是window即可)
        if(isNaN(item)) {
          return false; //=> 如果return的是false,则结束当前数组的循环
        }
        return item * 10; //=> 返回的结果是啥,就是把数组中点前项替换成啥
    },obj);
    结果: arr = [100,200,300,'AA',40];
 */

  let arr = [10,20,30,'AA',40],
      obj = {};

  Array.prototype.each = function(callback,o) {
    let arr = [];
    for(let i = 0; i < this.length; i++) {
      if(o) {
        if(!isNaN(this[i])) {
          this[i] = this[i] * 10;
        }
        arr.push(this[i]);
        callback.call(o,this[i],i);
      } else {
        if(!isNaN(this[i])) {
          this[i] = this[i] * 10;
        }
        arr.push(this[i]);
        callback(this[i],i);
      }
    }
    return arr;
  }
  arr = arr.each(function (item,index) {
     console.log(item,index,this);
  },obj);
  console.log(arr);


// let arr = [10,20,30,'AA',40],
//         obj = {};
// Array.prototype.each = function() {
//     let arr = [];
//     for(let i = 0; i < this.length; i++) {
//     if(isNaN(this[i])) {
//        arr.push(this[i]);
//        continue;
//       }
//       arr.push(this[i] * 10);
//     }
//    return arr;
//   }
 
//    arr = arr.each();
// console.log(arr)



/* 思考题二 */
//2. replace 重写这个方法,实现和内置一模一样的效果(只需要考虑 replace([reg],[callback])这种传参格式的处理)
/* let str = "zhufeng2019zhufeng2029";
  str = str.repalce(/zhufeng/g, function (...arg){
    //arg中存储了每一次大正则匹配的信息个小分组匹配的信息
      return '@'; //=> 返回的是啥把当前正则匹配的内容替换成啥
  });
*/
  String.prototype.replace1 = function(reg,callback) {
    
  }
  let str = "zhufeng2019zhufeng2029";
  str = str.repalce1(/zhufeng/g, function (...arg) {

  });
